package com.sharer.last.utils;

import java.util.*;

/**
 * 通用工具类
 *
 * @ClassName CommonUtil
 * @Author wangjin
 * @Date 2022/10/28/9:44
 * @Description 目前：集合交集并集差集操作
 * @Version 1.0
 */
public class CommonUtil {
    /**
     * 差集
     *
     * @param maxList 大的集合
     * @param minList 小的集合
     * @return
     */
    public static List<String> differenceList(List<String> maxList, List<String> minList) {
        // 大集合用LinkedList
        LinkedList<String> linkedList = new LinkedList<>(maxList);
        // 小集合用HashSet
        HashSet<String> hashSet = new HashSet<>(minList);
        // 采用Iterator迭代器进行遍历
        linkedList.removeIf(hashSet::contains);
        return new ArrayList<>(linkedList);
    }

    /**
     * 交集
     *
     * @param maxList 大的集合
     * @param minList 小的集合
     * @return
     */
    public static List<String> intersectList(List<String> maxList, List<String> minList) {
        // 大集合用LinkedList
        LinkedList<String> linkedList = new LinkedList<>(maxList);
        // 小集合用HashSet
        HashSet<String> hashSet = new HashSet<>(minList);
        // 采用Iterator迭代器进行遍历
        linkedList.removeIf(s -> !hashSet.contains(s));
        return new ArrayList<>(linkedList);
    }

    /**
     * 交集
     *
     * @param maxList 大的集合
     * @param minList 小的集合
     * @return
     */
    public  static <T> List<T> intersect(List<T> maxList, List<T> minList) {
        // 大集合用LinkedList
        LinkedList<T> linkedList = new LinkedList<>(maxList);
        // 小集合用HashSet
        HashSet<T> hashSet = new HashSet<>(minList);
        // 采用Iterator迭代器进行遍历
        linkedList.removeIf(s -> !hashSet.contains(s));
        return new ArrayList<>(linkedList);
    }

    /**
     * 并集
     *
     * @param maxList 大的集合
     * @param minList 小的集合
     * @return
     */
    public static List<String> unionList(List<String> maxList, List<String> minList) {
        Set<String> treeSet = new TreeSet<>(maxList);
        // Set自动去重
        treeSet.addAll(minList);
        return new ArrayList<>(treeSet);
    }
}
